package fiuba.algo3.tp2;

/*
 * Es una clase hecha para testear el correcto funcionamiento 
 * de dado un radio R y un centro C poder recorrer las hectareas 
 * (cada una de las/coordenadas) de esa circunferencia que se crea.
 */
public class Clase_PruebaParaUnaMatrizConCirculoDeUnRadioYCentro {

	private int[][] matriz;
	private int largoX;
	private int largoY;
	private Coordenada coordenadaCentro;
	private int diametroCirculo;

	public Clase_PruebaParaUnaMatrizConCirculoDeUnRadioYCentro(int largoX, int largoY) {
		this.matriz = new int[largoX][largoY];
		;
		this.largoX = largoX;
		this.largoY = largoY;

		for (int i = 0; i < this.largoX; i++) {
			for (int j = 0; j < this.largoY; j++) {
				this.matriz[i][j] = 0;
			}
		}
	}

	public void crearCirculo(Coordenada coordenadaCentro, int radioCirculo) {

		this.coordenadaCentro = coordenadaCentro;
		int diametroCirculo = transformaEnDiametro(radioCirculo);
		this.diametroCirculo = diametroCirculo;

		int contador = 1;
		for (int i = 0; i < this.diametroCirculo; i++) {
			for (int j = 0; j < this.diametroCirculo; j++) {

				if ((i <= (this.diametroCirculo) / 2) & (j >= ((this.diametroCirculo) / 2 - i) & (j <= ((this.diametroCirculo) / 2 + i)))) {
					if (((this.coordenadaCentro.obtenerColumna() - this.diametroCirculo / 2) + i >= 0)
							& ((this.coordenadaCentro.obtenerFila() - this.diametroCirculo / 2) + j >= 0)
							& ((this.coordenadaCentro.obtenerColumna() - this.diametroCirculo / 2) + i < this.largoY)
							& ((this.coordenadaCentro.obtenerFila() - this.diametroCirculo / 2) + j < this.largoX)) {
						this.matriz[(this.coordenadaCentro.obtenerFila() - this.diametroCirculo / 2) + j][(this.coordenadaCentro.obtenerColumna() - this.diametroCirculo / 2) + i] = 1;
					}

				} else { // Para desde la mitad hacia abajo

					int restaParaSimetria = (2 * contador);
					if (j >= ((this.diametroCirculo) / 2 - (i - restaParaSimetria)) & (j <= ((this.diametroCirculo) / 2 + (i - restaParaSimetria)))) {
						if (((this.coordenadaCentro.obtenerColumna() - this.diametroCirculo / 2) + i >= 0)
								& ((this.coordenadaCentro.obtenerFila() - this.diametroCirculo / 2) + j >= 0)
								& ((this.coordenadaCentro.obtenerColumna() - this.diametroCirculo / 2) + i < this.largoY)
								& ((this.coordenadaCentro.obtenerFila() - this.diametroCirculo / 2) + j < this.largoX)) {
							this.matriz[(this.coordenadaCentro.obtenerFila() - this.diametroCirculo / 2) + j][(this.coordenadaCentro.obtenerColumna() - this.diametroCirculo / 2) + i] = 1;
						}
					}
				}
			}
			if ((i > (this.diametroCirculo) / 2)) {
				contador += 1;
			}
		}
	}

	public void mostrarMatriz() {
		for (int i = 0; i < this.largoX; i++) {
			for (int j = 0; j < this.largoY; j++) {
				System.out.print(this.matriz[i][j]);
			}
			System.out.println();
		}
	}

	private int transformaEnDiametro(int numero) {
		return ((numero * 2) - 1);
	}
}
